package com.sayice.gomoku.dao;

import com.sayice.gomoku.pojo.Board;
import com.sayice.gomoku.pojo.BoardInfo;

import java.math.BigDecimal;
import java.util.List;

/**
 * 棋盘数据库操作
 */
public interface BoardDao {
    /**
     * 添加棋盘
     *
     * @param board 棋盘
     * @return 返回 sql 语句影响的行数
     */
    int add(Board board);
    
    /**
     * 更新棋盘名
     *
     * @param id   棋盘编号
     * @param name 新的棋盘名
     * @return 返回 sql 语句影响的行数
     */
    int updateName(int id, String name);
    
    /**
     * 更新价格
     *
     * @param id    棋盘编号
     * @param price 新的价格
     * @return 返回 sql 语句影响的行数
     */
    int updatePrice(int id, BigDecimal price);
    
    /**
     * 更新最后修改者
     *
     * @param id         棋盘编号
     * @param modifierId 最后修改者编号
     * @return 返回 sql 语句影响的行数
     */
    int updateModifier(int id, int modifierId);
    
    /**
     * 增加/减少使用数
     *
     * @param id    棋盘编号
     * @param count 改变的数量（减少时传入负数）
     * @return 返回 sql 语句影响的行数
     */
    int addUseCount(int id, int count);
    
    /**
     * 增加购买数
     *
     * @param id 棋盘编号
     * @return 返回 sql 语句影响的行数
     */
    int addBuyCount(int id);
    
    /**
     * 根据棋盘编号查询棋盘
     *
     * @param id 棋盘编号
     * @return 返回 Board 对象，返回 null 表示该棋盘不存在
     */
    Board queryById(int id);
    
    /**
     * 根据棋盘名查询棋盘
     *
     * @param name 棋盘名
     * @return 返回 Board 对象，返回 null 表示该棋盘不存在
     */
    Board queryByName(String name);
    
    /**
     * 根据购买者编号查询棋盘（查询用户购买的棋盘）
     *
     * @param userId 用户编号
     * @return 返回 Board 集合
     */
    List<Board> queryByUserId(int userId);
    
    /**
     * 查询所有棋盘 (默认棋盘除外)
     *
     * @return 返回 Board 集合
     */
    List<Board> queryAll();
    
    /**
     * 查询所有棋盘信息
     *
     * @return 返回 BoardInfo 集合
     */
    List<BoardInfo> queryAllInfo();
}
